package com.ruijixiang.leetcode.hot100;

import java.util.ArrayList;
import java.util.List;

public class leetcode0054 {
    public List<Integer> spiralOrder(int[][] matrix){
        List<Integer> ans=new ArrayList<>();
        if(matrix==null || matrix.length<=0 || matrix[0].length<=0){
            return ans;
        }
        int start=0;
        int rows=matrix.length,cols=matrix[0].length;
        while(rows>start*2 && cols>start*2){
            int endX=cols-1-start;
            int endY=rows-1-start;

            // 从左到右遍历
            for(int i=start;i<=endX;i++){
                ans.add(matrix[start][i]);
            }

            // 从上到下遍历
            if(start<endY){
                for(int i=start+1;i<=endY;i++){
                    ans.add(matrix[i][endX]);
                }
            }

            // 从右到左遍历
            if(start<endX && start<endY){
                for(int i=endX-1;i>=start;i--){
                    ans.add(matrix[endY][i]);
                }
            }

            // 从下到上遍历
            if(start<endX && start<endY-1){
                for(int i=endY-1;i>=start+1;i--){
                    ans.add(matrix[i][start]);
                }
            }
            start++;
        }
        return ans;
    }
}
